package linklist;

public class L707 {
    int size;
    ListNode head;

    public L707() {
        //初始化链表
        size=0;
        head=new ListNode(0);//头结点

    }



    public int get(int index) {
        //获取链表中第 index 个节点的值。这个index表示的是下标不是位序
        if (index<0 ||index>=size){
            return -1;
        }
        ListNode cur=head;
        for (int i=0;i<=index;i++){
            cur=cur.next;
        }
        return cur.val;

    }

    public void addAtHead(int val) {
        //头插法在链表的最前面插入一个节点
        addAtIndex(0,val);

    }

    public void addAtTail(int val) {
        //将值为 val 的节点追加到链表的最后一个元素。
        addAtIndex(size,val);

    }

    public void addAtIndex(int index, int val) {
        //在链表中的第 index 个节点之前添加值为 val  的节点
        if (index>size){
            return;
        }
        if (index<0){
            index=0;
        }
        size++;
        ListNode pre=head;
        for (int i=0;i<index;i++){
            pre=pre.next;

        }
        ListNode listNode = new ListNode(val);
        listNode.next=pre.next;
        pre.next=listNode;

    }

    public void deleteAtIndex(int index) {
        //如果索引 index 有效，则删除链表中的第 index 个节点
        if (index < 0 || index >= size) {
            return;
        }
        size--;
        ListNode pre = head;
        for (int i = 0; i < index; i++) {
            pre = pre.next;
        }
        pre.next = pre.next.next;

    }



}
